home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / security / AccessControlContext.class (.txt) next >
Encoding:
Java Class File  |  2006-11-29  |  5.3 KB  |  308 lines

  1. package java.security;
  2.  
  3. import [Ljava.security.ProtectionDomain;;
  4. import java.util.ArrayList;
  5. import sun.security.util.Debug;
  6. import sun.security.util.SecurityConstants;
  7.  
  8. public final class AccessControlContext {
  9.    private ProtectionDomain[] context;
  10.    private boolean isPrivileged;
  11.    private AccessControlContext privilegedContext;
  12.    private DomainCombiner combiner = null;
  13.    private static boolean debugInit = false;
  14.    private static Debug debug = null;
  15.  
  16.    static Debug getDebug() {
  17.       if (debugInit) {
  18.          return debug;
  19.       } else {
  20.          if (Policy.isSet()) {
  21.             debug = Debug.getInstance("access");
  22.             debugInit = true;
  23.          }
  24.  
  25.          return debug;
  26.       }
  27.    }
  28.  
  29.    public AccessControlContext(ProtectionDomain[] var1) {
  30.       if (var1.length == 0) {
  31.          this.context = null;
  32.       } else if (var1.length == 1) {
  33.          if (var1[0] != null) {
  34.             this.context = (ProtectionDomain[])((ProtectionDomain;)var1).clone();
  35.          } else {
  36.             this.context = null;
  37.          }
  38.       } else {
  39.          ArrayList var2 = new ArrayList(var1.length);
  40.  
  41.          for(int var3 = 0; var3 < var1.length; ++var3) {
  42.             if (var1[var3] != null && !var2.contains(var1[var3])) {
  43.                var2.add(var1[var3]);
  44.             }
  45.          }
  46.  
  47.          this.context = new ProtectionDomain[var2.size()];
  48.          this.context = (ProtectionDomain[])var2.toArray(this.context);
  49.       }
  50.  
  51.    }
  52.  
  53.    public AccessControlContext(AccessControlContext var1, DomainCombiner var2) {
  54.       SecurityManager var3 = System.getSecurityManager();
  55.       if (var3 != null) {
  56.          var3.checkPermission(SecurityConstants.CREATE_ACC_PERMISSION);
  57.       }
  58.  
  59.       this.context = var1.context;
  60.       this.combiner = var2;
  61.    }
  62.  
  63.    AccessControlContext(ProtectionDomain[] var1, DomainCombiner var2) {
  64.       if (var1 != null) {
  65.          this.context = (ProtectionDomain[])((ProtectionDomain;)var1).clone();
  66.       }
  67.  
  68.       this.combiner = var2;
  69.    }
  70.  
  71.    AccessControlContext(ProtectionDomain[] var1, boolean var2) {
  72.       this.context = var1;
  73.       this.isPrivileged = var2;
  74.    }
  75.  
  76.    boolean isPrivileged() {
  77.       return this.isPrivileged;
  78.    }
  79.  
  80.    DomainCombiner getAssignedCombiner() {
  81.       AccessControlContext var1;
  82.       if (this.isPrivileged) {
  83.          var1 = this.privilegedContext;
  84.       } else {
  85.          var1 = AccessController.getInheritedAccessControlContext();
  86.       }
  87.  
  88.       return var1 != null ? var1.combiner : null;
  89.    }
  90.  
  91.    public DomainCombiner getDomainCombiner() {
  92.       SecurityManager var1 = System.getSecurityManager();
  93.       if (var1 != null) {
  94.          var1.checkPermission(SecurityConstants.GET_COMBINER_PERMISSION);
  95.       }
  96.  
  97.       return this.combiner;
  98.    }
  99.  
  100.    public void checkPermission(Permission var1) throws AccessControlException {
  101.       boolean var2 = false;
  102.       if (var1 == null) {
  103.          throw new NullPointerException("permission can't be null");
  104.       } else {
  105.          if (getDebug() != null) {
  106.             var2 = !Debug.isOn("codebase=");
  107.             if (!var2) {
  108.                for(int var3 = 0; this.context != null && var3 < this.context.length; ++var3) {
  109.                   if (this.context[var3].getCodeSource() != null && this.context[var3].getCodeSource().getLocation() != null && Debug.isOn("codebase=" + this.context[var3].getCodeSource().getLocation().toString())) {
  110.                      var2 = true;
  111.                      break;
  112.                   }
  113.                }
  114.             }
  115.  
  116.             var2 &= !Debug.isOn("permission=") || Debug.isOn("permission=" + var1.getClass().getCanonicalName());
  117.             if (var2 && Debug.isOn("stack")) {
  118.                Thread.currentThread();
  119.                Thread.dumpStack();
  120.             }
  121.  
  122.             if (var2 && Debug.isOn("domain")) {
  123.                if (this.context == null) {
  124.                   debug.println("domain (context is null)");
  125.                } else {
  126.                   for(int var7 = 0; var7 < this.context.length; ++var7) {
  127.                      debug.println("domain " + var7 + " " + this.context[var7]);
  128.                   }
  129.                }
  130.             }
  131.          }
  132.  
  133.          if (this.context != null) {
  134.             for(int var8 = 0; var8 < this.context.length; ++var8) {
  135.                if (this.context[var8] != null && !this.context[var8].implies(var1)) {
  136.                   if (var2) {
  137.                      debug.println("access denied " + var1);
  138.                   }
  139.  
  140.                   if (Debug.isOn("failure")) {
  141.                      if (!var2) {
  142.                         debug.println("access denied " + var1);
  143.                      }
  144.  
  145.                      Thread.currentThread();
  146.                      Thread.dumpStack();
  147.                      ProtectionDomain var4 = this.context[var8];
  148.                      Debug var5 = debug;
  149.                      AccessController.doPrivileged(new 1(this, var5, var4));
  150.                   }
  151.  
  152.                   throw new AccessControlException("access denied " + var1, var1);
  153.                }
  154.             }
  155.  
  156.             if (var2) {
  157.                debug.println("access allowed " + var1);
  158.             }
  159.  
  160.          }
  161.       }
  162.    }
  163.  
  164.    AccessControlContext optimize() {
  165.       AccessControlContext var1;
  166.       if (this.isPrivileged) {
  167.          var1 = this.privilegedContext;
  168.       } else {
  169.          var1 = AccessController.getInheritedAccessControlContext();
  170.       }
  171.  
  172.       boolean var2 = this.context == null;
  173.       boolean var3 = var1 == null || var1.context == null;
  174.       if (var1 != null && var1.combiner != null) {
  175.          return this.goCombiner(this.context, var1);
  176.       } else if (var3 && var2) {
  177.          return this;
  178.       } else if (var2) {
  179.          return var1;
  180.       } else {
  181.          int var4 = this.context.length;
  182.          if (var3 && var4 <= 2) {
  183.             return this;
  184.          } else if (var4 == 1 && this.context[0] == var1.context[0]) {
  185.             return var1;
  186.          } else {
  187.             int var5 = var3 ? 0 : var1.context.length;
  188.             ProtectionDomain[] var6 = new ProtectionDomain[var4 + var5];
  189.             if (!var3) {
  190.                System.arraycopy(var1.context, 0, var6, 0, var5);
  191.             }
  192.  
  193.             label93:
  194.             for(int var7 = 0; var7 < this.context.length; ++var7) {
  195.                ProtectionDomain var8 = this.context[var7];
  196.                if (var8 != null) {
  197.                   for(int var9 = 0; var9 < var5; ++var9) {
  198.                      if (var8 == var6[var9]) {
  199.                         continue label93;
  200.                      }
  201.                   }
  202.  
  203.                   var6[var5++] = var8;
  204.                }
  205.             }
  206.  
  207.             if (var5 != var6.length) {
  208.                if (!var3 && var5 == var1.context.length) {
  209.                   return var1;
  210.                }
  211.  
  212.                if (var3 && var5 == var4) {
  213.                   return this;
  214.                }
  215.  
  216.                ProtectionDomain[] var10 = new ProtectionDomain[var5];
  217.                System.arraycopy(var6, 0, var10, 0, var5);
  218.                var6 = var10;
  219.             }
  220.  
  221.             this.context = var6;
  222.             this.combiner = null;
  223.             this.isPrivileged = false;
  224.             return this;
  225.          }
  226.       }
  227.    }
  228.  
  229.    private AccessControlContext goCombiner(ProtectionDomain[] var1, AccessControlContext var2) {
  230.       if (getDebug() != null) {
  231.          debug.println("AccessControlContext invoking the Combiner");
  232.       }
  233.  
  234.       ProtectionDomain[] var3 = var2.combiner.combine(var1, var2.context);
  235.       this.context = var3;
  236.       this.combiner = var2.combiner;
  237.       this.isPrivileged = false;
  238.       return this;
  239.    }
  240.  
  241.    public boolean equals(Object var1) {
  242.       if (var1 == this) {
  243.          return true;
  244.       } else if (!(var1 instanceof AccessControlContext)) {
  245.          return false;
  246.       } else {
  247.          AccessControlContext var2 = (AccessControlContext)var1;
  248.          if (this.context == null) {
  249.             return var2.context == null;
  250.          } else if (var2.context == null) {
  251.             return false;
  252.          } else if (this.containsAllPDs(var2) && var2.containsAllPDs(this)) {
  253.             if (this.combiner == null) {
  254.                return var2.combiner == null;
  255.             } else if (var2.combiner == null) {
  256.                return false;
  257.             } else {
  258.                return this.combiner.equals(var2.combiner);
  259.             }
  260.          } else {
  261.             return false;
  262.          }
  263.       }
  264.    }
  265.  
  266.    private boolean containsAllPDs(AccessControlContext var1) {
  267.       boolean var2 = false;
  268.  
  269.       for(int var4 = 0; var4 < this.context.length; ++var4) {
  270.          var2 = false;
  271.          ProtectionDomain var3;
  272.          if ((var3 = this.context[var4]) == null) {
  273.             for(int var8 = 0; var8 < var1.context.length && !var2; ++var8) {
  274.                var2 = var1.context[var8] == null;
  275.             }
  276.          } else {
  277.             Class var5 = var3.getClass();
  278.  
  279.             for(int var7 = 0; var7 < var1.context.length && !var2; ++var7) {
  280.                ProtectionDomain var6 = var1.context[var7];
  281.                var2 = var6 != null && var5 == var6.getClass() && var3.equals(var6);
  282.             }
  283.          }
  284.  
  285.          if (!var2) {
  286.             return false;
  287.          }
  288.       }
  289.  
  290.       return var2;
  291.    }
  292.  
  293.    public int hashCode() {
  294.       int var1 = 0;
  295.       if (this.context == null) {
  296.          return var1;
  297.       } else {
  298.          for(int var2 = 0; var2 < this.context.length; ++var2) {
  299.             if (this.context[var2] != null) {
  300.                var1 ^= this.context[var2].hashCode();
  301.             }
  302.          }
  303.  
  304.          return var1;
  305.       }
  306.    }
  307. }
  308.